package com.peter.dao;

import com.peter.entity.Page;
import com.peter.entity.Users;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
 * UsersDao 接口：用于定义对 Users 实体类进行数据库操作的方法。
 * 这是一个 MyBatis 的 Mapper 接口。
 */
public interface UsersDao {

    /**
     * 获取所有用户列表
     * @return 包含所有用户的 List 集合
     */

    List<Users> getUserList();

    /**
     * 根据邮箱获取用户（方式一：方法参数未使用注解）
     * 注意：在 XML 中只能通过参数索引（如：#{0}）访问
     * @param email 用户的邮箱
     * @return 对应的用户对象
     */

    Users getUserByEmail(String email);

    /**
     * 根据邮箱获取用户（方式二：使用 @Param 注解）
     * 可以在 XML 中通过参数名（如：#{email}）访问，更直观
     * @param email 用户的邮箱
     * @return 对应的用户对象
     */

    Users getUserByEmail2(@Param("email") String email);

    /**
     * 分页获取用户列表（方式一：使用 Map 传递分页参数）
     * Map 中通常包含两个 key：startIndex 和 pageSize
     * @param map 包含分页起始索引和每页大小的 Map
     * @return 当前页的用户列表
     */

    List<Users> getUserLimit(Map<String, Integer> map);

    /**
     * 分页获取用户列表（方式二：使用自定义 Page 对象传递参数）
     * Page 实体中应包含 startIndex、pageSize 等字段
     * @param page 自定义的分页参数对象
     * @return 当前页的用户列表
     */
    List<Users> getUserLimit2(Page page);

    /**
     * 分页获取用户列表（方式三：使用多个 @Param 参数）
     * 可以在 XML 中直接使用参数名，如 #{startIndex}, #{pageSize}
     * @param startIndex 分页起始位置
     * @param pageSize 每页数据条数
     * @return 当前页的用户列表
     */
    List<Users> getUserLimit3(@Param("startIndex") Integer startIndex, @Param("pageSize") Integer pageSize);
}
